package fuck.hookwzry.qq;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;

class QQUtil {
    private byte[] a;
    private byte[] b;
    private byte[] c;
    private int d;
    private int e;
    private int f;
    private int g;
    private byte[] h;
    private boolean i;
    private int j;
    private Random k;

    QQUtil() {
        super();
        this.i = true;
        this.k = new Random();
    }

    private static long a(byte[] arg4, int arg5, int arg6) {
        if(arg6 > 4) {
            arg6 = arg5 + 4;
        }
        else {
            arg6 += arg5;
        }

        long v0 = 0;
        while(arg5 < arg6) {
            v0 = v0 << 8 | (((long)(arg4[arg5] & 0xFF)));
            ++arg5;
        }

        return 0xFFFFFFFFL & v0;
    }

    private void a() {
        int v2;
        int v1;
        this.f = 0;
        while(true) {
            v1 = this.f;
            v2 = 8;
            if(v1 >= v2) {
                break;
            }

            this.a[v1] = this.i ? ((byte)(this.a[v1] ^ this.b[v1])) : ((byte)(this.a[v1] ^ this.c[this.e + v1]));
            ++this.f;
        }

        System.arraycopy(this.a(this.a), 0, this.c, this.d, v2);
        this.f = 0;
        while(true) {
            v1 = this.f;
            if(v1 >= v2) {
                break;
            }

            byte[] v3 = this.c;
            int v4 = this.d + v1;
            v3[v4] = ((byte)(v3[v4] ^ this.b[v1]));
            this.f = v1 + 1;
        }

        System.arraycopy(this.a, 0, this.b, 0, v2);
        v1 = this.d;
        this.e = v1;
        this.d = v1 + v2;
        this.f = 0;
        this.i = false;
    }

    private byte[] a(byte[] arg28) {
        QQUtil v0 = this;
        byte[] v1 = arg28;
        int v2 = 16;
        int v4 = 4;
        try {
            long v5 = a(v1, 0, v4);
            long v7 = a(v1, v4, v4);
            long v9 = a(v0.h, 0, v4);
            long v11 = a(v0.h, v4, v4);
            int v3 = 8;
            long v13 = a(v0.h, v3, v4);
            long v15 = a(v0.h, 12, v4);
            long v17 = 0;
            long v19 = 0x9E3779B9L;
            while(true) {
                int v1_1 = v2 - 1;
                if(v2 <= 0) {
                    break;
                }

                v17 = v17 + v19 & 0xFFFFFFFFL;
                v5 = v5 + ((v7 << v4) + v9 ^ v7 + v17 ^ (v7 >>> 5) + v11) & 0xFFFFFFFFL;
                v7 = v7 + ((v5 << v4) + v13 ^ v5 + v17 ^ (v5 >>> 5) + v15) & 0xFFFFFFFFL;
                v2 = v1_1;
            }

            ByteArrayOutputStream v1_2 = new ByteArrayOutputStream(v3);
            DataOutputStream v2_1 = new DataOutputStream(((OutputStream)v1_2));
            v2_1.writeInt(((int)v5));
            v2_1.writeInt(((int)v7));
            v2_1.close();
            return v1_2.toByteArray();
        }
        catch(IOException e) {
            return null;
        }
    }

    private byte[] a(byte[] arg28, int arg29) {
        QQUtil v0 = this;
        byte[] v1 = arg28;
        int v2 = arg29;
        int v3 = 16;
        int v4 = 4;
        try {
            long v5 = a(v1, v2, v4);
            long v1_1 = a(v1, v2 + v4, v4);
            long v7 = a(v0.h, 0, v4);
            long v9 = a(v0.h, v4, v4);
            int v12 = 8;
            long v13 = a(v0.h, v12, v4);
            long v15 = a(v0.h, 12, v4);
            long v17 = 0xE3779B90L;
            long v19 = 0x9E3779B9L;
            while(true) {
                int v11 = v3 - 1;
                if(v3 <= 0) {
                    break;
                }

                v1_1 = v1_1 - ((v5 << v4) + v13 ^ v5 + v17 ^ (v5 >>> 5) + v15) & 0xFFFFFFFFL;
                v5 = v5 - ((v1_1 << v4) + v7 ^ v1_1 + v17 ^ (v1_1 >>> 5) + v9) & 0xFFFFFFFFL;
                v17 = v17 - v19 & 0xFFFFFFFFL;
                v3 = v11;
            }

            ByteArrayOutputStream v3_1 = new ByteArrayOutputStream(v12);
            DataOutputStream v4_1 = new DataOutputStream(((OutputStream)v3_1));
            v4_1.writeInt(((int)v5));
            v4_1.writeInt(((int)v1_1));
            v4_1.close();
            return v3_1.toByteArray();
        }
        catch(IOException e) {
            return null;
        }
    }

    protected byte[] a(byte[] arg10, int arg11, int arg12, byte[] arg13) {
        int v4;
        int v0 = 0;
        this.e = 0;
        this.d = 0;
        this.h = arg13;
        arg13 = new byte[arg11 + 8];
        byte[] v2 = null;
        if(arg12 % 8 == 0) {
            if(arg12 < 16) {
            }
            else {
                this.b = this.a(arg10, arg11);
                this.f = this.b[0] & 7;
                int v1 = arg12 - this.f - 10;
                if(v1 < 0) {
                    return v2;
                }
                else {
                    int v3;
                    for(v3 = arg11; v3 < arg13.length; ++v3) {
                        arg13[v3] = 0;
                    }

                    this.c = new byte[v1];
                    this.e = 0;
                    v3 = 8;
                    this.d = v3;
                    this.j = v3;
                    ++this.f;
                    this.g = 1;
                    while(true) {
                        v4 = this.g;
                        if(v4 <= 2) {
                            int v6 = this.f;
                            if(v6 < v3) {
                                this.f = v6 + 1;
                                this.g = v4 + 1;
                            }

                            if(this.f != v3) {
                                continue;
                            }

                            if(!this.b(arg10, arg11, arg12)) {
                                return v2;
                            }

                            arg13 = arg10;
                            continue;
                        }

                        break;
                    }

                    while(v1 != 0) {
                        v4 = this.f;
                        if(v4 < v3) {
                            this.c[v0] = ((byte)(arg13[this.e + arg11 + v4] ^ this.b[v4]));
                            ++v0;
                            --v1;
                            this.f = v4 + 1;
                        }

                        if(this.f != v3) {
                            continue;
                        }

                        this.e = this.d - v3;
                        if(!this.b(arg10, arg11, arg12)) {
                            return v2;
                        }

                        arg13 = arg10;
                    }

                    this.g = 1;
                    while(this.g < v3) {
                        v0 = this.f;
                        if(v0 < v3) {
                            if((arg13[this.e + arg11 + v0] ^ this.b[v0]) != 0) {
                                return v2;
                            }
                            else {
                                this.f = v0 + 1;
                            }
                        }

                        if(this.f == v3) {
                            this.e = this.d;
                            if(!this.b(arg10, arg11, arg12)) {
                                return v2;
                            }
                            else {
                                arg13 = arg10;
                            }
                        }

                        ++this.g;
                    }

                    return this.c;
                }
            }
        }

        return v2;
    }

    protected byte[] a(byte[] arg3, byte[] arg4) {
        return this.a(arg3, 0, arg3.length, arg4);
    }

    private int b() {
        return this.k.nextInt();
    }

    private boolean b(byte[] arg6, int arg7, int arg8) {
        int v3;
        this.f = 0;
        while(true) {
            int v1 = this.f;
            v3 = 8;
            if(v1 >= v3) {
                break;
            }

            if(this.j + v1 >= arg8) {
                return true;
            }

            this.b[v1] = ((byte)(this.b[v1] ^ arg6[this.d + arg7 + v1]));
            this.f = v1 + 1;
        }

        this.b = this.b(this.b);
        if(this.b == null) {
            return false;
        }

        this.j += v3;
        this.d += v3;
        this.f = 0;
        return true;
    }

    private byte[] b(byte[] arg2) {
        return this.a(arg2, 0);
    }

    private byte[] b(byte[] arg6, int arg7, int arg8, byte[] arg9) {
        byte[] v3_1;
        int v3;
        int v0 = 8;
        this.a = new byte[v0];
        this.b = new byte[v0];
        this.f = 1;
        this.g = 0;
        this.e = 0;
        this.d = 0;
        this.h = arg9;
        this.i = true;
        this.f = (arg8 + 10) % v0;
        int v9 = this.f;
        if(v9 != 0) {
            this.f = 8 - v9;
        }

        this.c = new byte[this.f + arg8 + 10];
        this.a[0] = ((byte)(this.b() & 0xF8 | this.f));
        for(v9 = 1; true; ++v9) {
            v3 = this.f;
            if(v9 > v3) {
                break;
            }

            this.a[v9] = ((byte)(this.b() & 0xFF));
        }

        this.f = v3 + 1;
        for(v9 = 0; v9 < v0; ++v9) {
            this.b[v9] = 0;
        }

        this.g = 1;
        while(this.g <= 2) {
            v9 = this.f;
            if(v9 < v0) {
                v3_1 = this.a;
                this.f = v9 + 1;
                v3_1[v9] = ((byte)(this.b() & 0xFF));
                ++this.g;
            }

            if(this.f != v0) {
                continue;
            }

            this.a();
        }

        while(arg8 > 0) {
            v9 = this.f;
            if(v9 < v0) {
                v3_1 = this.a;
                this.f = v9 + 1;
                v3_1[v9] = arg6[arg7];
                --arg8;
                ++arg7;
            }

            if(this.f != v0) {
                continue;
            }

            this.a();
        }

        this.g = 1;
        while(true) {
            int v6 = this.g;
            if(v6 > 7) {
                break;
            }

            arg7 = this.f;
            if(arg7 < v0) {
                byte[] v8 = this.a;
                this.f = arg7 + 1;
                v8[arg7] = 0;
                this.g = v6 + 1;
            }

            if(this.f != v0) {
                continue;
            }

            this.a();
        }

        return this.c;
    }

    protected byte[] b(byte[] arg3, byte[] arg4) {
        return this.b(arg3, 0, arg3.length, arg4);
    }
}
